package cz.uhk.ppro.services;


import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

import cz.uhk.ppro.entities.Dil;
import cz.uhk.ppro.entities.Stitek;

/***
 * 
 * Zprostředkovává db práci se štítky
 *
 */

@Transactional
public class StitekDbService {
	@PersistenceContext
	EntityManager em;
	
	public void pridej(String nazev){
		/**
		 * přidá štítek
		 * parametr název štítku
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			Stitek stitek = new Stitek();
			stitek.setNazevStitku(nazev);
			em.persist(stitek);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void uprav(Stitek stitek, String nazev){
		/**
		 * upraví název štítku
		 * parametry štítek k úpravě a nový názec
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			stitek.setNazevStitku(nazev);
		em.merge(stitek);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void prirad(Stitek stitek, Dil dil){
		/**
		 * přiřadí štítek k dílu
		 * parametry díl a štítek k přiřazení
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		    List<Stitek> stitky = dil.getStitky();
			stitky.add(stitek);
			dil.setStitky(stitky);
			em.merge(dil);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void odrad(Dil dil){
		/**
		 * zruší všechny přiřazení štítků k dílu
		 * parametry díl 
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		    List<Stitek> stitky = new ArrayList<Stitek>();
			dil.setStitky(stitky);
			em.merge(dil);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void smaz (Stitek stitek){
		/**
		 * Smaže štítek z databáze 
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			Stitek st = em.find(Stitek.class, stitek.getId());
			em.remove(st);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public List<Stitek> vypis (){
		/**
		 * Vypíše všechny štítky
		 */
			@SuppressWarnings("unchecked")
			List<Stitek> stitky = em.createQuery("from Stitek").getResultList();

		return stitky;
	}
	
	public Stitek vrat (int id) {
		/**
		 * Vrátí štítek s daným id
		 */
		Stitek stitek = em.find(Stitek.class, id);
		return stitek;
	}
	
	public Stitek vratNazev (String nazev) {
		/**
		 * Vrátí štítek s daným id
		 */
		Stitek stitek = (Stitek)(em.createQuery("from Stitek where nazevStitku = ?").setParameter(1, nazev).getSingleResult());
		return stitek;
	}
}
